home *** CD-ROM | disk | FTP | other *** search
/ PCMania 32 / PCMania CD32_2.iso / sharewar / util / scroll / scroll2.asm < prev    next >
Assembly Source File  |  1995-01-25  |  5KB  |  162 lines

  1.  
  2. _TEXT           SEGMENT BYTE PUBLIC 'CODE'
  3.  
  4.         ASSUME  CS:_TEXT
  5.  
  6.                 PUBLIC  _SCROLL
  7.  
  8. _SCROLL     PROC    NEAR
  9.                 CLI
  10.                 PUSH    BP              ;Salva registros afectados a la pila.
  11.                 MOV     BP,SP           ;Pone el puntero de la pila en BP.
  12. ;                PUSH    AX              ;Salva registros afectados a la pila.
  13.                 PUSH    BX
  14.                 PUSH    CX
  15.                 PUSH    DI
  16.                 PUSH    DS
  17. ;                PUSH    DX
  18.                 PUSH    ES
  19.                 PUSH    SI
  20.                 MOV     BX,0A000
  21.                 MOV     DS,BX          ;Origen la pantalla      
  22.                 XOR     SI,SI
  23.                 MOV     BX,[BP+4]    ;Carga la dirección del scroll
  24.                 CMP     BX,1
  25.                 JE      arriba
  26.                 CMP     BX,2
  27.                 JE      abajo
  28.                 CMP     BX,3
  29.                 JE      izquierda
  30.                 JMP     derecha
  31. arriba:         MOV     BX,seg datos
  32.                 MOV     ES,BX
  33.                 MOV     BX,offset datos
  34.                 MOV     DI,BX
  35.                 MOV     CX,160   ;Una línea
  36.                 REP     MOVSW
  37.                 PUSH    DS
  38.                 POP     ES
  39.                 XOR     DI,DI
  40.                 MOV     CX,07C60
  41.                 REP     MOVSW
  42.                 MOV     BX,seg datos
  43.                 MOV     DS,BX
  44.                 MOV     BX,offset datos
  45.                 MOV     SI,BX
  46.                 MOV     CX,160
  47.                 REP     MOVSW
  48.                 JMP     fin
  49. abajo:          MOV     BX,seg datos
  50.                 MOV     ES,BX
  51.                 MOV     BX,offset datos
  52.                 MOV     DI,BX
  53.                 MOV     SI,63680   ;Guarda última línea
  54.                 MOV     CX,160   ;Una línea
  55.                 REP     MOVSW
  56.                 PUSH    DS
  57.                 POP     ES
  58.                 MOV     SI,63360  ;penúltima línea
  59.                 MOV     BX,63680        ;última
  60.                 MOV     DI,BX
  61.                 MOV     CX,199
  62.          bucle: PUSH    CX
  63.                 MOV     CX,160
  64.                 REP     MOVSW
  65.                 POP     CX
  66.                 SUB     DI,640
  67.                 SUB     SI,640
  68.                 LOOP    bucle
  69.                 MOV     BX,seg datos
  70.                 MOV     DS,BX
  71.                 MOV     BX,offset datos
  72.                 MOV     SI,BX
  73.                 XOR     DI,DI
  74.                 MOV     CX,160
  75.                 REP     MOVSW
  76.                 JMP     fin
  77. izquierda:      MOV     BX,seg datos
  78.                 MOV     ES,BX
  79.                 MOV     BX,offset datos
  80.                 MOV     DI,BX
  81.                 MOV     BX,200     
  82.        bucle2:  MOVSW
  83.                 ADD     SI,318
  84.                 DEC     BX
  85.                 JNZ     bucle2
  86.                 PUSH    DS
  87.                 POP     ES
  88.                 XOR     DI,DI
  89.                 XOR     SI,SI
  90.                 ADD     SI,2                
  91.                 MOV     BX,200
  92.        bucle3:  MOV     CX,159    ;El resto de la línea
  93.                 REP     MOVSW
  94.                 ADD     SI,2
  95.                 ADD     DI,2
  96.                 DEC     BX
  97.                 JNZ     bucle3
  98.                 MOV     BX,seg datos
  99.                 MOV     DS,BX
  100.                 MOV     BX,offset datos
  101.                 MOV     SI,BX
  102.                 XOR     DI,DI
  103.                 ADD     DI,318
  104.                 MOV     BX,200
  105.        bucle4:  MOVSW
  106.                 ADD     DI,318
  107.                 DEC     BX
  108.                 JNZ     bucle4
  109.                 JMP     fin
  110. derecha:        MOV     BX,seg datos                
  111.                 MOV     ES,BX
  112.                 MOV     BX,offset datos
  113.                 MOV     DI,BX
  114.                 MOV     BX,200     
  115.                 ADD     SI,318
  116.        bucle5:  MOVSW
  117.                 ADD     SI,318                   ;Guarda la columna
  118.                 DEC     BX
  119.                 JNZ     bucle5
  120.                 PUSH    DS
  121.                 POP     ES
  122.                 MOV     BX,200
  123.                 MOV     SI,316                                
  124.                 MOV     DI,318
  125.        bucle7:  MOV     CX,159            ;Copia las filas en orden inverso
  126.        bucle6:  MOVSW
  127.                 SUB     SI,4
  128.                 SUB     DI,4
  129.                 LOOP    bucle6
  130.                 ADD     SI,638
  131.                 ADD     DI,638
  132.                 DEC     BX
  133.                 JNZ     bucle7
  134.                 MOV     DS,seg datos
  135.                 MOV     SI,offset datos
  136.                 XOR     DI,DI                
  137.                 MOV     BX,200
  138.        bucle8:  MOVSW                             ;Restaura la columna
  139.                 ADD     DI,318
  140.                 DEC     BX
  141.                 JNZ     bucle8
  142.                 JMP     fin
  143. datos           DW      200 DUP(?)
  144. fin:            POP     SI              ;Reestablece registros desde la pila.
  145.                 POP     ES
  146. ;                POP     DX
  147.                 POP     DS
  148.                 POP     DI
  149.                 POP     CX
  150.                 POP     BX
  151. ;                POP     AX
  152.                 POP     BP
  153.                 STI
  154.                 RET                     ;Vuelve al C.
  155. _SCROLL     ENDP
  156.  
  157.  
  158. _TEXT           ENDS
  159.  
  160.                 END
  161.  
  162.